package com.dwy2002.user;


import com.dwy2002.common.Result;
import com.dwy2002.pojo.dto.users.PasswordLoginDTO;
import com.dwy2002.pojo.dto.users.RegisterDTO;
import com.dwy2002.pojo.dto.users.UpdateNicknameDTO;
import com.dwy2002.pojo.dto.users.UpdatePasswordDTO;
import com.dwy2002.pojo.vo.users.UserinfoVO;
import com.dwy2002.user.service.IUsersService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/01/11
 */
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UsersController {
    private final IUsersService service;

    /**
     * 注册
     *
     * @param registerInfo 用户信息
     * @author 杜伟毅
     * @since 2025/1/11 0011 16:51
     */
    @PostMapping("/register")
    public Result<Void> register(@RequestBody RegisterDTO registerInfo) {
        return service.register(registerInfo);
    }

    /**
     * 登录
     *
     * @param loginInfo 登陆的信息
     * @author 杜伟毅
     * @since 2025/1/12 0012 0:28
     */
    @PostMapping("/login")
    public Result<String> login(@RequestBody PasswordLoginDTO loginInfo) {
        return service.login(loginInfo);
    }

    /**
     * 修改密码
     *
     * @param userinfo 修改信息
     * @author 杜伟毅
     * @since 2025/1/13 0013 22:31
     */
    @PutMapping("/me/password")
    public Result<Void> updatePassword(@RequestBody UpdatePasswordDTO userinfo) {
        return service.updatePassword(userinfo);
    }

    /**
     * 获取用户信息
     *
     * @author 杜伟毅
     * @since 2025/1/17 0017 23:34
     */
    @GetMapping
    public Result<UserinfoVO> getUserInfo() {
        return service.getUserInfo();
    }

    /**
     * 修改呢称
     *
     * @param userinfo 新的呢称
     * @author 杜伟毅
     * @since 2025/1/18 0018 17:17
     */
    @PutMapping("/me/nickname")
    public Result<Void> updateNickname(@RequestBody UpdateNicknameDTO userinfo) {
        return service.updateNickname(userinfo);
    }

    /**
     * 修改头像
     *
     * @param oldAvatar 旧头像的地址
     * @param newAvatar 新头像的文件
     * @author 杜伟毅
     * @since 2025/1/19 0019 13:48
     */
    @PutMapping("/me/avatar")
    public Result<Void> updateAvatar(@RequestParam("oldAvatar") String oldAvatar, @RequestParam("newAvatar") MultipartFile newAvatar) throws IOException {
        return service.updateAvatar(oldAvatar, newAvatar);
    }
}
